Graphics rendering is becoming increasingly more complex as more features are supported and more content-rich scenes are able to rendered. In order to increase throughput, rendering may be performed in multiple sequences of instructions (“threads”) performed in parallel. However, some threads may use more processing resources than others, causing some resources to be over-used and rendering performance to suffer, while other processing resources are under-used, thereby creating a relatively inefficient use of processing resources.